package demo.day11

// Kotlin [] 操作符学习
fun main() {
    val p = KtBaseDay11_03(null, "qq", "jj", "oo");
    println(p[1])
    println(p[0])
}

class KtBaseDay11_03<INPUT>(vararg objects: INPUT, val isReal: Boolean = true) {
    val objectArray: Array<out INPUT> = objects
    fun getObj1(): Array<out INPUT>? = objectArray.takeIf { isReal }
    fun getObj2(): Any = objectArray.takeIf { isReal } ?: "返回数据为null"
    fun getObj3(): Any? = objectArray.takeIf { isReal } ?: "返回数据为null" ?: null
    fun getObj4(index: Int): INPUT? = objectArray[index].takeIf { isReal }
    fun getObj5(index: Int): Any? = objectArray[index].takeIf { isReal } ?: "Aaa" ?: null

    // 运算符重载 对应调用方法p[0] p[1]
    operator fun get(index: Int) = objectArray[index].takeIf { isReal }
}

// 泛型是很大的范围类型去可以接收很多类型 当然也可以接受null
// 但是要处理好 否则会闪退
// 一般处理泛型接收 都用string?
fun <INPUT> inputObj(inputValue: INPUT) {
    println((inputValue as String?)?.length ?: "0")
}